Hola Fer. Convencido de que era el .NPL no te detalle el funcionamiento. Lo hago ahora:

0) Carga los valores, almacenados en la eeprom, en tecla_1 a 4.
 
1)Solicita el codigo de acceso y barre el teclado.

2) Si se ingres un digito ingresa en la interrupcin y lo compara con el codigo valido,tecla_1 a 4. Si todos son correctos, al apretar la 5ta tecla, ves el mensaje de Aceptado y habilita las dems funciones.Si no muestra error de codigo.Si da error 3 veces borra los registros y vuelve a inicio.

3)Con * seleccionas cambio de codigo y te pide la primer vez el nuevo codigo.

4)Ingresados 4 digitos(codigo nuevo)los almacena (temporal_1a4)y solicita repetir el codigo.

5) Ingresando 4 digitos los va comparando con los almacenados en el paso anterior y, si son correctos pasa sin visor a grabar el codigo nuevo en la eeprom y cargar el nuevo codigo entecla_1 a 4 para futuras validaciones.Si no muestra error de codigo.Si da error 3 veces borra los registros y vuelve a inicio.

- Las funciones adicionales se ejecutan si no elijes cambio de codigo.Cambiar codigo al salir lo hace reseteando todo, por lo que debe validarse el codigo nuevamente para las funciones

- F4 acepta el codigo ingresado(necesario para poder corregir el 4to valor ingresado), mientras F3 hace que no avance el contador de presionadas y se pueda corregir el valor ingresado.

- Las funcione de cada tecla son elegibles o descartables segn necesidad. 

- He modificado los mensajes y solo se va en el inicia (unico mostrado fuera de valido o no), donde veo: Valxx (codigo valido), tempxx(valor guardado en 1er paso del cambio de codigo, contxx(numero de tecla pulsada)y Tec xx(valor de la tecla pulzada.
Adems he modificado poniendo todos los pines RB0 a 3 a +V, luego habilito la interrupcin y barro el teclado, con lo que elimino el valor de cualquier tecla residente durante la interrupcion.

El problema est en la re habilitacin del teclado, pero no le encuentro la pata a la sota. 
 